package bp.App.Demo.Event;

import bp.sys.*;
import bp.sys.base.EventBase;
import bp.wf.GERpt;
import bp.wf.GenerWorkFlow;
import bp.wf.SendReturnObjs;

import java.util.Hashtable;

import static bp.sys.FrmEventAttr.EventSource;
/**
 * 执行事件类
 * 1，如果遇到错误就抛出异常信息，前台界面就会提示错误并不向下执行。
 * 2，执行成功，把执行的结果赋给SucessInfo变量，如果不需要提示就赋值为空或者为null。
 * 3.执行失败，把执行结果赋给this.SucessInfo变量，格式：err@错误信息
 */
public class EventDemo  extends EventBase {

    public EventDemo() {
        this.setTitle("事件demo例子");
    }


    @Override
    public void Do() {

        try{
            GenerWorkFlow gwf = new GenerWorkFlow(this.getWorkID());
            this.SucessInfo = "";
            switch (EventSource) {
                case EventListNode.SendSuccess://发送成功后
//                    DoEventBaseSendSuccess(gwf);
                    break;
                case EventListNode.UndoneAfter://撤销发送之后
                    break;
                case EventListNode.SendWhen://发送前
//                    DoEventBaseSendWhen(gwf);
                    break;
                case EventListNode.ReturnAfter://退回后
                    break;
                case EventListFlow.FlowOverAfter://流程结束后
                    break;
                default:
                    break;
            }
        }catch (Exception e){
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    private void DoEventBaseSendWhen(GenerWorkFlow gwf) throws Exception {
        //获取当前节点
        long nodeid=  gwf.getNodeID();
        //根据节点进行业务处理
        if(nodeid==201 ){
            /**
             * 获取主表单数据  表单存储表:ND2Rpt
             */
            GERpt rpt = new GERpt("ND2Rpt");
            rpt.setOID(gwf.getWorkID());
            int count = rpt.RetrieveFromDBSources();
            //表单中某个字段数据， 字段名称:HeTongJinE
            double HeTongJinE = rpt.GetValDoubleByKey("HeTongJinE");
            if(HeTongJinE<0){
                //设置主表单数据错误信息
                this.SucessInfo = "err@合同金额不能小于0";
                return;
            }
        }

        //根据节点进行业务处理
        if(nodeid==101 || nodeid==603 ){
            //获取当前表单中从表的数据  从表存储表:ND101GeZhuanYeMingXi
            GEDtls dtls = new GEDtls("ND101GeZhuanYeMingXi");
            dtls.Retrieve(GEDtlAttr.RefPK, gwf.getWorkID(), "OID");
            /**
             * 遍历从表数据
             */
            for (GEDtl dtl : dtls.ToJavaList()) {
                //获取从表某个字段数据
                double ZhuanYeZhanBi = dtl.GetValDoubleByKey("ZhuanYeZhanBi");
                if(ZhuanYeZhanBi<0.5){
                    //设置从表数据错误信息
                    this.SucessInfo = "err@专业占比不能小于0.5";
                    return;
                }
            }
        }



    }

    private void DoEventBaseSendSuccess(GenerWorkFlow gwf) {

        /**
         * 进行业务处理
         * 如果没有问题 不做任何处理
         */
    }
}
